home *** CD-ROM | disk | FTP | other *** search
- #include "bbs.h"
- extern struct myst my_struct;
- struct MyEditor
- {
- SHORT MaxFileLength;
- UBYTE MaxScrLength;
- UBYTE EditorTop;
- UBYTE EditorMaxWidth;
- UBYTE EditorAnsiColor;
- UBYTE EditorAllowLoad;
- UBYTE EditorAllowAbort;
- CPTR EditorFile;
- CPTR EditorIncludeFile;
- CPTR EditorPrependFile;
- CPTR EditorPostPendFile;
- };
- extern struct MyEditor EditorStruct;
-
- //#define CO_SYSOPLEVEL 240 /* My CO_SYSOP LEVEL */
- extern int rzmsg;
- extern long NumOfZMsgs, Last_Msg_Read_Conf,Last_New_Read_Conf;
- int FWDFlag,NoDirF,TEMPFlag,ReplyFlag,Comment,PrivateFlag,NonStop,stat,Lines=0;
- long FWDToMsg,MSGNUM,DelMSGNUM,CurrentSeekPos,AlreadyRecvd;
- char FWDDir,AttachedFile[255];
- char MsgBuf[100][80];
- int netflag;
- int ValidNet(char *str);
- BPTR gfh;
- extern char NetConf[];
- struct User tuser;
- struct UserKeys tuserkeys;
- int SaveMsg(char *s);
- void DeleteMsgFiles(long num);
- void AttachMsgFiles(long num,char *s);
- /* static functions */
- int Edit(void);
- int doormsgcode=0;
- static int fileattach=0;
- extern int XIMPort;
- static int Readit(void);
- static void CreateFile(char *s)
- {
- FILE *f;
-
- if(f=fopen(GSTR3,"w")) {
- fprintf(f,"DO NOT DELETE!\n");
- fclose(f);
- }
- }
-
- static BPTR LockMsgBase(void)
- {
- BPTR lock;
- UWORD loop=0;
- LONG error;
-
- sprintf(GSTR3,"%sMailLock",MsgBase_Location);
- do {
- if(!(lock=Lock(GSTR3,ACCESS_WRITE))) {
- error=IoErr();
- if(error==205) CreateFile(GSTR3);
- Delay(120L);
- SendChar('.');
- }
- } while(!lock&&loop++<30);
-
- if(!lock) {
- sprintf(GSTR3,"\tError %ld trying to Lock MSGBASE\n",IoErr());
- CallersLog(GSTR3);
- }
- return(lock);
- }
-
- static void MsgToHeader(void)
- {
- AEPutStr("\r\n (------------------------------)\r\n");
- AEPutStr(" To: (Enter)='ALL'? ");
- }
-
- static int SaveStatOnly(void)
- {
- long error;
- char string[255];
- BPTR fd;
-
- strcpy(string,MsgBase_Location);
- strcat(string,"MailStats");
- if(!(fd=Open(string,MODE_NEWFILE))) {
- MyError(2);
- return(FAILURE);
- }
-
- error=Write(fd,(char *)&MailStat,sizeof(struct MailStat));
- if(error!=sizeof(struct MailStat)) {
- AEPutStr("Wasn't the same!\r\n");
- Close(fd);
- MyError(2);
- return(FAILURE);
- }
- Close(fd);
- return(SUCCESS);
- }
-
-
- static int Save_MessageHeader(void)
- {
- extern int stat;
- long error;
- Seek(gfh,0,OFFSET_END);
- error=Write(gfh,(char *)&MailHeader,sizeof(struct MailHeader));
- if(error!=sizeof(struct MailHeader)) return(FAILURE);
-
- Seek(gfh,CurrentSeekPos,OFFSET_BEGINNING);
-
- MailStat.HighMsgNum+=1;
- if(MailStat.HighMsgNum==2) MailStat.LowestNotDel=1;
-
- stat=SaveStatOnly();
- if(stat==FAILURE) return(stat);
- return(SUCCESS);
- }
-
- static int CheckToForward(char *str,char *name,int check)
- {
- int stat,error=0;
- strcpy(GSTR3,Conference_Location);
- if(GSTR3[strlen(GSTR3)-1]=='/') GSTR3[strlen(GSTR3)-1]='\0';
- if(GetFromIconStr(GSTR3,"FORWARDMAIL",str)) {
- if(str[strlen(str)-1]=='\n') str[strlen(str)-1]='\0';
- if(check) {
- Load_Account(1,&tuser,&tuserkeys);
- if(StringCompare(name,tuser.Name)==SUCCESS) {
- if(stat=Find_User_From_Name(1,str,&tuser,&tuserkeys)) {
- sprintf(GSTR3," Forwarding mail To: %s\r\n",tuserkeys.UserName);
- AEPutStr(GSTR3);
- strcpy(name,tuserkeys.UserName);
- error=1;
- }
- }
- } else {
- if(stat=Find_User_From_Name(1,str,&tuser,&tuserkeys)) {
- sprintf(GSTR3," Forwarding mail To: %s\r\n",tuserkeys.UserName);
- AEPutStr(GSTR3);
- strcpy(name,tuserkeys.UserName);
- error=1;
- }
- }
- }
- return(error);
- }
-
- int CallMsgFuncs(WORD which,int pass);
-
- int CommentToSYSOP(void)
- {
- extern struct User tuser;
- extern struct UserKeys tuserkeys;
- int stat;
- char str[255];
-
- stat=Load_Account(1,&tuser,&tuserkeys);
- strcpy(MailHeader.ToName,tuser.Name);
-
- AEPutStr("\r\n (------------------------------)\r\n");
- sprintf(str," To: (Enter)='ALL'? %s\r\n",MailHeader.ToName);
- AEPutStr(str);
- CheckToForward(str,MailHeader.ToName,0);
- AEPutStr("Subject: (Blank)=abort? ");
- strcpy(MailHeader.ToNet,Sopt->BBSConfig);
- strcpy(MailHeader.FromNet,Sopt->BBSConfig);
- stat=LineInput("",str,30,KEYBOARD_TIMEOUT);
- if(stat<0) return(stat);
-
- if(str[0]=='\0') {
- AEPutStr("\r\n");
- return(SUCCESS);
- }
- strcpy(MailHeader.Subject,str);
- MailHeader.Status[0]='R';
- Comment=1;
- stat=CallMsgFuncs(2,0);
- if(stat<0) return(stat);
- return(SUCCESS);
- }
-
- static int SecondWord(char *s)
- {
- int loop;
-
- loop=FirstChar(s);
- if(loop>=0) {
- for(; loop<strlen(s); loop++) {
- if(s[loop]==' ') return(loop+1);
- }
- }
- return(-1);
- }
-
- int LoadMsg(char *s)
- {
- FILE *f;
-
- Lines=0;
-
- strcpy(MsgBuf[0],s);
- if(f=fopen(MsgBuf[0],"r")) {
- while(fgets(MsgBuf[Lines],90,f)!=NULL&&Lines<99) {
- MsgBuf[Lines][strlen(MsgBuf[Lines])-1]='\0';
- Lines++;
- }
- fclose(f);
- return(1);
- }
- return(0);
- }
- int SaveMsg(char *s)
- {
- FILE *f;
- int i=0;
- if(Lines)
- {
- if(f=fopen(s,"w")) {
- while(Lines){
- fprintf(f,"%s\n",MsgBuf[i]);
- Lines--; i++;
- }
- fclose(f);
- return(1);
- }
- }
- return(0);
- }
-
- static int EnterMSG(void)
- {
- int AFlag;
- long i,i2,i3;
- BPTR rzmsglock;
- char str[255],string[255];
- FILE *f;
- int netmail=0;
- BPTR msgbaselock;
- AFlag=0;
- AttachedFile[0]='\0';
- if(Comment==1) {
- Comment=0;
- goto SkipAll;
- }
- if(ReplyFlag==1) goto SkipBegin;
- else {
- i=CommandSplit();
- if(i>1) {
- if(i=SecondWord(MAINMENU_Li))
- if(strlen(&MAINMENU_Li[i])<=30 && i>0)
- {
- strcpy(MailHeader.ToName,MAINMENU_Li+i);
- MsgToHeader();
- AEPutStr(MailHeader.ToName);
- AEPutStr("\r\n");
- goto SkipEntry;
- }
- }
- }
-
-
- MsgToHeader();
- stat=LineInput("",MailHeader.ToName,30,KEYBOARD_TIMEOUT);
- if(stat<0) return(stat);
-
- SkipEntry:
-
- MailHeader.Status[0]='P';
- if(strlen(MailHeader.ToName)==0) {
- AFlag=1;
- strcpy(MailHeader.ToName,"ALL");
- } else {
- strcpy(str,MailHeader.ToName);
- strlwr(str); /* convert string to lower case */
- stat=strncmp(str,"eall",4); /* looking for eall */
-
- if(stat==0) {
- if(GET_BIT(ACS_EALL_LEVEL)) {
- AFlag=2;
- strcpy(MailHeader.ToName,"EALL");
- } else {
- AEPutStr("\r\nUser does not exist!!\r\n\r\n");
- return(FAILURE);
- }
- } else {
- stat=strncmp(str,"sysop",5);
- if(stat==0)
- Load_Account(1,&tuser,&tuserkeys);
- else {
- if(!netflag)
- {
- stat=ChooseAName(MailHeader.ToName,&tuser,&tuserkeys,1);
- if(stat<0) return(stat);
- }
- else { strcpy(MailHeader.ToName,str); netmail=1; }
- }
- if(!netmail)
- {
- strcpy(MailHeader.ToName,tuserkeys.UserName);
- if(!IsTempConf(&tuser,CN-1)) {
- AEPutStr("\r\nUser does not have access to this conference!\r\n\r\n");
- return(FAILURE);
- }
- netmail=0;
- }
- }
- }
-
- CheckToForward(str,MailHeader.ToName,1);
- if(netflag)
- {
- AEPutStr(" ToNet: (Blank)= N/A ? ");
- stat=LineInput("",MailHeader.ToNet,7,KEYBOARD_TIMEOUT);
- if(stat<0) return(stat);
- if(!ValidNet((char *)&MailHeader.ToNet))
- {
- AEPutStr("This BBS does not recognize that net address\r\n\r\n");
- return(FAILURE);
- }
- strcpy(MailHeader.FromNet,Sopt->BBSConfig);
- }
- AEPutStr("Subject: (Blank)=abort? ");
- stat=LineInput("",MailHeader.Subject,30,KEYBOARD_TIMEOUT);
- if(stat<0) return(stat);
- if(strlen(MailHeader.Subject)==0) {
- AEPutStr("\r\n");
- return(FAILURE);
- }
-
- SkipBegin:
- if(!AFlag) {
- AEPutStr(" Private ");
- stat=YesNo(2);
- if(stat<0) return(stat);
- if(stat) MailHeader.Status[0]='R';
- else MailHeader.Status[0]='P';
- }
-
- if(ReplyFlag==1) {
- ReplyFlag=0;
- AEPutStr(" Quote in Reply ");
- stat=YesNo(2);
- if(stat<0) return(stat);
- if(stat) {
- sprintf(GSTR1,"%s%d",MsgBase_Location,MailHeader.MsgNumb);
- if(stat=LoadMsg(GSTR1)) {
- AEPutStr("\r\n");
- gnsflag=0;
- LineCount=0;
- for(i=0; i<Lines; i++) {
- sprintf(str,"%2d> %s\r\n",i+1,MsgBuf[i]);
- AEPutStr(str);
- if(stat=CheckForPause())
- break;
- }
- for(;;) {
- AEPutStr("\r\n Enter Startline,Endline or (*=ALL, A=Abort): ");
- stat=LineInput("",str,6,KEYBOARD_TIMEOUT);
- if(stat<0) return(stat);
- stat=FirstCharValue(str);
- if(stat=='A'||stat=='a') {
- i=(-1);
- Lines=0;
- break;
- }
- if(stat=='*') {
- i=1;
- i2=Lines;
- } else sscanf(str,"%d,%d",&i,&i2);
-
- if((i>0&&i<=Lines)&&(i2>0&&i2<=Lines)&&(i<=i2))
- break;
-
- }
- if(i!=(-1)) {
- for(i3=0; i3<=(i2-i); i3++) {
- if(i3<98) {
- sprintf(str,">%s",MsgBuf[i+i3-1]);
- strcpy(MsgBuf[i3],str);
- }
- }
- if(i3<98) Lines=i3;
- else Lines=98;
- strcpy(MsgBuf[Lines++]," ");
- MsgBuf[Lines][0]='\0';
- } else {
- for(i=0; i<100; i++)
- MsgBuf[i][0]='\0';
- }
- }
- } else {
- for(i=0; i<100; i++)
- MsgBuf[i][0]='\0';
- Lines=0;
- }
- } else {
-
- SkipAll:
- for(i=0; i<100; i++) MsgBuf[i][0]='\0';
- Lines=0;
- }
-
- stat=Edit();
- if(stat==TIMEOUT||stat==NO_CARRIER) return(stat);
-
- if(stat<0) {
- AEPutStr("\r\n"); return(FAILURE);
- }
-
- AEPutStr("Saving...");
- MailHeader.Recv=0L;
- MailHeader.MsgDate=time(NULL);
- strcpy(MailHeader.FromName,User.Name);
- if(msgbaselock=LockMsgBase()) {
- GetMailStatFile();
- MailHeader.MsgNumb=MailStat.HighMsgNum;
- stat=Save_MessageHeader();
- if(stat!=FAILURE) {
- sprintf(string,"Message Number %ld...",MailHeader.MsgNumb);
- AEPutStr(string);
- sprintf(GSTR3,"%s%ld",MsgBase_Location,MailHeader.MsgNumb);
- if(!(f=fopen(GSTR3,"w"))) {
- AEPutStr("Failed!\r\n\r\n"); rzmsg=NULL;
- return(FAILURE);
- }
- for(i=0; i<Lines; i++)
- fprintf(f,"%s\n",MsgBuf[i]);
- fclose(f);
- AEPutStr("done!\r\n\r\n");
-
- if(AttachedFile[0]!='\0') {
- SetComment(GSTR3,AttachedFile);
- AttachedFile[0]='\0';
- }
- } else AEPutStr("Failed!\r\n\r\n");
- UnLock(msgbaselock);
- if(rzmsg)
- {
- sprintf(GSTR1,"%sF%ld",MsgBase_Location,MailHeader.MsgNumb);
- if(rzmsglock=CreateDir(GSTR1)) UnLock(rzmsglock);
- SetEnvStat(ENV_UPLOADING);
- AEPutStr("\r\n"); /* 11w */
- stat = Upload_a_File(0); rzmsg=NULL;
- sprintf(GSTR1,"%sF%ld",MsgBase_Location,MailHeader.MsgNumb);
- DeleteFile(GSTR1);
- if(stat == GOODBYE) { fileattach=FALSE;
- Goodbye();
- return(STANDARD_LOGOFF);
- }
- if(stat == NO_CARRIER) {
- return(NO_CARRIER);
- }
- return(stat);
- }
- } else
- AEPutStr("ERROR! Another task has the MsgBase locked!\r\nMessage has not been saved!\r\n\r\n");
- rzmsg=NULL;
- return(SUCCESS);
- }
-
- int Edit(void)
- {
- register int c;
- int cn,j,x,back,BKFlag,helplist=0;
- static char str[200],SPACE[90],str2[10],temp[170];
-
- /* Clear msg buffer */
- rzmsg=NULL;
- str[0]='\0';
- x=0;
- BKFlag=0;
- sprintf(str,"%sCommands/SysCmd/FULLEDIT.info",Cmds->BBSLoc);
- if(!access(str,00) && GET_BIT(ACS_FULLEDIT) && User.EditorType!=1)
- {
-
- if(User.EditorType!=2)
- { AEPutStr("FullScreen Editor");
- stat=YesNo(2);
- } else stat=1;
- if(stat>0)
- {
- EditorStruct.EditorIncludeFile=0L;
- sprintf(GSTR2,"%sNode%d/Work/msg.i",Cmds->BBSLoc,Cmds->AcLvl[LVL_NODE_NUMBER]);
- if(SaveMsg(GSTR2)) EditorStruct.EditorIncludeFile=(ULONG)&GSTR2;
- sprintf(str,"%sCommands/SysCmd/",Cmds->BBSLoc);
- sprintf(GSTR1,"%sNode%d/Work/msg",Cmds->BBSLoc,Cmds->AcLvl[LVL_NODE_NUMBER]);
- EditorStruct.EditorFile=(ULONG)&GSTR1;
- EditorStruct.EditorPrependFile=0L;
- EditorStruct.EditorPostPendFile=0L;
- EditorStruct.EditorAllowLoad=0;
- EditorStruct.EditorAllowAbort=1;
- EditorStruct.EditorMaxWidth=75;
- EditorStruct.EditorAnsiColor=AnsiColor;
- EditorStruct.EditorTop=1;
- EditorStruct.MaxScrLength=User.LineLength;
- EditorStruct.MaxFileLength=100;
- if(CustomCommand(str,"FULLEDIT",1))
- {
- if(LoadMsg(GSTR1))
- {
- User.Messages_Posted++;
- DeleteFile(GSTR1);
- DeleteFile(GSTR2);
- if(fileattach && GET_BIT(ACS_PRI_MSGFILES) || GET_BIT(ACS_PUB_MSGFILES))
- {
- AEPutStr("Upload to Message Base");
- stat=YesNo(2); if(stat>0) rzmsg=1;
- }
- return(SUCCESS);
- }
- DeleteFile(GSTR2);
- return(-1);
- }
- }
- }
- AEPutStr("\r\n");
- AEPutStr(" Enter your text. (Enter) alone to end. (75 chars/line, 100 lines, max)\r\n");
- AEPutStr(" (|-------|-------|-------|-------|-------|-------|-------|-------|-------|--)\r\n");
- if(Lines!=0)
- {
- for(j=0; j<Lines; j++)
- {
- sprintf(SPACE,"%2d> %s\r\n",j+1,MsgBuf[j]);
- AEPutStr(SPACE);
- }
- }
- /*removed (JOE)
-
- if(Lines!=0) {
- for(j=0; j<Lines; j++) {
- sprintf(SPACE,"%2d> %s\r\n",j+1,MsgBuf[j]);
- AEPutStr(SPACE);
- }
- }
- */
- SPACE[0]='\0';
-
- do {
- BEG_IN:
- strcpy(MsgBuf[Lines],SPACE);
- sprintf(str,"%2d> %s",Lines+1,MsgBuf[Lines]);
- AEPutStr(str);
-
- for(;;) {
- Next2:
-
-
- c=ReadChar(KEYBOARD_TIMEOUT);
- if(c<0) return(c);
- /*if(c==('X'-'A'+1))
- {
- sprintf(GSTR1,"%sNode%d/PlayPen/",Cmds->BBSLoc,Cmds->AcLvl[VL_NODE_NUMBER]);
- if(Zmodem_Receive(GSTR1,0))
- MsgFiles();
- goto Next2;
- }*/
- if(c=='\r') {
- if(SPACE[0]=='\0') {
- MsgBuf[Lines][0]='\0';
- BKFlag=1;
- break;
- }
- strcpy(MsgBuf[Lines],SPACE);
- SPACE[0]='\0';
- AEPutStr("\r\n");
- x=0;
- break;
- }
- if(c=='\30') {
- while(x) {
- AEPutStr("\b \b");
- --x;
- }
- SPACE[x]='\0';
- goto Next2;
- }
- if(c=='\b' || c=='\177') {
- if(x>0) {
- x-=1;
- SPACE[x]='\0';
- AEPutStr("\b \b");
- goto Next2;
- }
- goto Next2;
- }
- if(c=='\t') {
- c=x%8;
- if(x+(8-c)>72) c='\t';
- else {
- for(;c<8; c++) {
- str2[0]=(char)' ';
- str2[1]='\0';
- SendChar(' ');
- strcat(SPACE,str2);
- x++;
- }
- }
- }
- if(c<' ')
- goto Next2;
-
- x+=1;
- SendChar(c);
- str2[0]=(char)c;
- str2[1]='\0';
- strcat(SPACE,str2);
- if(x>75) {
- back=0;
- for(cn=x; cn>=0; cn--) {
- if(SPACE[cn-1]==' ') {
- back=x-cn;
- SPACE[cn-1]='\0';
- break;
- }
- }
- if(back==0) {
- strcpy(MsgBuf[Lines],SPACE);
- AEPutStr("\r\n");
- SPACE[0]='\0';
- x=0;
- break;
- }
- str[0]='\0';
- for(cn=(x-back); cn<x; cn++) {
- str2[0]=SPACE[cn];
- str2[1]='\0';
- strcat(str,str2);
- }
- x=strlen(str);
- strcpy(MsgBuf[Lines],SPACE);
- strcpy(SPACE,str);
- for(cn=0; cn<x; cn++)
- AEPutStr("\b \b");
- AEPutStr("\r\n");
- break;
- }
- }
-
- Lines+=1;
- if(Lines==98&&BKFlag==0)
- AEPutStr("\r\nWarning two lines remaining.\r\n\r\n");
-
- } while(BKFlag==0&&Lines<100);
-
- if(Lines<100) Lines-= 1;
- else Lines = 100;
-
- AEPutStr("\r\n");
-
- do {
- if(!helplist)
- {
- AEPutStr("\r\nMsg. Options: A,C,D,E");
- if(GET_BIT(ACS_ATTACH_FILES) && fileattach) AEPutStr(",F");
- AEPutStr(",L,S");
- if(fileattach && (MailHeader.Status[0]=='P' && GET_BIT(ACS_PUB_MSGFILES)) || (GET_BIT(ACS_PRI_MSGFILES) && MailHeader.Status[0]!='P'))
- AEPutStr(",X");
- AEPutStr(",? >:");
- }
- else
- {
- AEPutStr("\r\nA>bort");
- AEPutStr("\r\nC>ontinue");
- AEPutStr("\r\nD>elete Lines");
- AEPutStr("\r\nE>dit");
- if(fileattach && GET_BIT(ACS_ATTACH_FILES))
- AEPutStr("\r\nF>ile Attachment");
- AEPutStr("\r\nL>ist");
- AEPutStr("\r\nS>ave");
- if(fileattach && (MailHeader.Status[0]=='P' && GET_BIT(ACS_PUB_MSGFILES)) || (GET_BIT(ACS_PRI_MSGFILES) && MailHeader.Status[0]!='P'))
- AEPutStr("\r\nX>fer Files");
- AEPutStr("\r\n >: ");
- helplist=0;
- }
- stat=LineInput("",str,10,KEYBOARD_TIMEOUT);
- if(stat<0) break;
- if(str[0]=='?') { helplist=1; continue; }
- if(str[0]=='D'||str[0]=='d') {
- do {
- if(Lines==0) {
- AEPutStr("\r\nNo lines to delete.\r\n");
- stat=0;
- break;
- }
- /*
- if(Lines==89) Lines+=1;
- */
- sprintf(str,"\r\nLine number to delete [1..%d]? ",Lines);
- AEPutStr(str);
- stat=LineInput("",str,5,KEYBOARD_TIMEOUT);
- if(stat<0) break;
- if(str[0]=='\0') { stat=0; break; }
- sscanf(str,"%d",&stat);
-
- if(stat<1||stat>Lines) {
- sprintf(str,"\r\nLine %d does not exist.\r\n",stat);
- AEPutStr(str);
- }
- } while(stat<1||stat>Lines);
-
- if(stat<0) break;
- if(stat==0) continue;
- sprintf(str,"\r\n%2d> %s\r\n",stat,MsgBuf[stat-1]);
- AEPutStr(str);
- AEPutStr("\r\nIs this the correct line (Y/N)? ");
- cn=YesNo(0);
- if(cn<0) break;
-
- if(cn) {
- for(j=(stat-1); j<Lines; j++)
- strcpy(MsgBuf[j],MsgBuf[j+1]);
-
- sprintf(str,"\r\nDeleted line %d.\r\n",stat);
- Lines-=1;
- AEPutStr(str);
- }
- continue;
- }
-
- if(str[0]=='C'||str[0]=='c') {
- AEPutStr("\r\n");
- Lines-=1;
- if(Lines<0) Lines=0;
- strcpy(SPACE,MsgBuf[Lines]);
- BKFlag=0;
- x=strlen(SPACE);
- goto BEG_IN;
- }
- if(str[0]=='E'||str[0]=='e') {
- if(Lines<1) {
- AEPutStr("\r\nNo Lines to edit!\r\n");
- continue;
- }
- LoopHere:
- sprintf(str,"\r\nLine number to edit [1..%d]? ",Lines);
- AEPutStr(str);
-
- stat=LineInput("",str,5,KEYBOARD_TIMEOUT);
- if(stat<0) return(TIMEOUT);
- if(str[0]=='\0') continue;
-
- sscanf(str,"%d",&x);
- if(x<1||x>Lines) {
- sprintf(str,"\r\nLine %d does not exist.\r\n",x);
- AEPutStr(str);
- goto LoopHere;
- }
- sprintf(SPACE,"\r\n%2d> %s\r\n",x,MsgBuf[x-1]);
- AEPutStr(SPACE);
- AEPutStr("\r\n Old string;New string");
- AEPutStr("\r\n (------------------------------------------------------------)");
- AEPutStr("\r\n :");
-
- stat=LineInput("",str,60,KEYBOARD_TIMEOUT);
- if(stat<0) return(TIMEOUT);
- if(str[0]=='\0') continue;
-
- stat=ProcessLine(str,MsgBuf[x-1],temp);
- if(stat==0) {
- AEPutStr("\r\nString not found!\r\n");
- continue;
- } else {
- AEPutStr("\r\n NewLine:\r\n --------\r\n >");
- AEPutStr(temp);
- AEPutStr("\r\n\r\nCorrect ");
-
- stat=YesNo(1);
- if(stat<0) return(stat);
- if(!stat) continue;
-
- strcpy(MsgBuf[x-1],temp);
- }
- continue;
- }
-
- if(str[0]=='L'||str[0]=='l') {
- AEPutStr("\r\n");
- for(j=0; j<Lines; j++) {
- sprintf(SPACE,"%2d> %s\r\n",j+1,MsgBuf[j]);
- AEPutStr(SPACE);
- }
- continue;
- }
-
- if(str[0]=='F'||str[0]=='f') {
- if(GET_BIT(ACS_ATTACH_FILES) && fileattach) {
- for(;;) {
- if(XIMPort==CONSOLE_PORT) asl(AttachedFile); else
- {
- AEPutStr("\r\nEnter path/filename to attach ('5 <DIR>'=DIR): ");
- stat=LineInput("",AttachedFile,250,KEYBOARD_TIMEOUT);
- if(stat<0) return(stat);
- if(AttachedFile[0]=='5'&&AttachedFile[1]==' ') {
- strcpy(MAINMENU_Li,AttachedFile);
- AttachedFile[0]='\0';
- MyDirAnyWhere();
- continue;
- }
- }
- if(AttachedFile[0]!='\0') {
-
- strlwr(AttachedFile);
- if(FindAssign(AttachedFile))
- {
- AEPutStr("\r\nDevice not Mounted.\r\n");
- AEPutStr("\r\n");
- AttachedFile[0]='\0'; continue;
- }
- if(Restricted(AttachedFile)){AttachedFile[0]='\0'; continue; }
- else{
- AEPutStr("Delete file when message is deleted ");
- stat=YesNo(2);
- if(stat<0) { return(stat); }
- strlwr(AttachedFile);
- if(stat){ AttachedFile[0]=toupper(AttachedFile[0]); }
- }
- }
- break;
- }
- } else
- AEPutStr("\r\nCommand requires higher access.\r\n");
-
- }
- if(str[0]=='S'||str[0]=='s') {
- User.Messages_Posted++;
- return(SUCCESS);
- }
- if(fileattach && (str[0]=='X'||str[0]=='x') && (GET_BIT(ACS_PRI_MSGFILES) || GET_BIT(ACS_PUB_MSGFILES)))
- {
- rzmsg=1;
- User.Messages_Posted++;
- return(SUCCESS);
- }
- if(str[0]=='A'||str[0]=='a') {
- AEPutStr("\r\nAbort message entry (y/n)? ");
- stat=YesNo(0);
- if(stat<0) break;
-
- if(stat) return(-1);
- }
- } while(stat>=0);
- return(stat);
- }
-
-
- static int Load_MessageHeader(void)
- {
- long HeadPoint,size,FilePos,error,temp;
- HeadPoint=MSGNUM-MailStat.LowestKey;
- size=(long)sizeof(struct MailHeader);
- FilePos=(long)size*(long)HeadPoint;
- temp=FilePos-CurrentSeekPos;
- if(temp) {
- error=Seek(gfh,temp,OFFSET_CURRENT);
- if(error<0) {
- MyError(2);
- return(FAILURE);
- }
- }
-
- error=FRead(gfh,(char *)&MailHeader,sizeof(struct MailHeader),1);
- if(error!=1) {
- MyError(2);
- return(FAILURE);
- }
-
- CurrentSeekPos=Seek(gfh,0,OFFSET_CURRENT);
- return(SUCCESS);
- }
-
- static int Save_OverHeader(void)
- {
- long HeadPoint,size,FilePos,error,temp;
-
- HeadPoint=DelMSGNUM-MailStat.LowestKey;
- size=(long)sizeof(struct MailHeader);
- FilePos=(long)size*(long)HeadPoint;
- temp=FilePos-CurrentSeekPos;
-
- error=Seek(gfh,temp,OFFSET_CURRENT);
- if(error<0) {
- MyError(2);
- return(FAILURE);
- }
-
- error=Write(gfh,(char *)&MailHeader,sizeof(struct MailHeader));
- if(error!=sizeof(struct MailHeader)) {
- MyError(2);
- return(FAILURE);
- }
- Seek(gfh,CurrentSeekPos,OFFSET_BEGINNING);
- return(SUCCESS);
- }
-
- static int CheckAttachedFile(long msgnumb,int flag)
- {
- int stat;
- char str[250];
- struct FileInfoBlock *FBlock;
- BPTR FLock;
- int filetype=0;
- GSTR1[0]='\0';
-
- DTBT=0;
- TBT=0;
- TTTM=NULL;
- TTEFF=NULL;
- TTCPS=NULL;
-
- sprintf(str,"%s%ld",MsgBase_Location,msgnumb);
-
- if(FBlock=(struct FileInfoBlock *)AllocDosObject(DOS_FIB,NULL)) {
- if(FLock=Lock(str,ACCESS_READ))
- {
- if(Examine(FLock,FBlock)) {
- if(FBlock->fib_Comment[0]!='\0'){
- strcpy(GSTR1,FBlock->fib_Comment); filetype=1;
- }
-
- }
- UnLock(FLock);
- if(filetype==0)
- {
- sprintf(str,"%sF%ld",MsgBase_Location,msgnumb);
- if(FLock=Lock(str,ACCESS_READ))
- {
- UnLock(FLock); filetype=2;
- }
- }
- }
- FreeDosObject(DOS_FIB,FBlock);
- }
-
-
- if(filetype) {
- if(flag) {
- AEPutStr("...This message has an attached file(s), Download? (y/N/goodbye)? ");
- stat=ReadChar(KEYBOARD_TIMEOUT);
- if(stat<0)
- return(stat);
- if(stat=='n' || stat=='N')AEPutStr("No\r\n");
- if(stat=='y' || stat=='Y')
- {
- AEPutStr("Yes\r\n\r\n");
- if(filetype==2)AttachMsgFiles(msgnumb,GSTR1);
-
- Zmodem_Send(GSTR1);
- }
- if(stat=='g' || stat=='G')
- {
- AEPutStr("Goodbye\r\n\r\n");
- if(filetype==2)AttachMsgFiles(msgnumb,GSTR1);
- Zmodem_Send(GSTR1);
- AEPutStr("\r\n");
- stat=PGoodbye();
- if(stat==GOODBYE) ModemOffHook();
- return(stat);
- }
-
-
- stat=0;
- AEPutStr("\r\n");
- } else {
-
- if(filetype==2) DeleteMsgFiles(msgnumb);
- stat=isupper(GSTR1[0]);
- if(stat) {
- DeleteFile(GSTR1);
- AEPutStr("\r\nDeleted attached file(s) ");
- AEPutStr(GSTR1);
- }
- }
- }
- return(SUCCESS);
- }
-
- static int DeleteMSG(void)
- {
- char string[255];
- BPTR msgbaselock;
-
- if(User.Sec_Status<210) {
- if(StringCompare(MailHeader.FromName,User.Name)==SUCCESS)
- goto GoAheadDel;
- if(StringCompare(MailHeader.ToName,User.Name)==SUCCESS)
- goto GoAheadDel;
- AEPutStr("\r\nMessage not deleted, not your mail.\r\n\r\n");
- return(FAILURE);
- }
-
- GoAheadDel:
- if(msgbaselock=LockMsgBase()) {
- GetMailStatFile();
- DelMSGNUM=MSGNUM-FWDFlag;
- if(MailStat.LowestNotDel==DelMSGNUM) MailStat.LowestNotDel+=1;
- stat=SaveStatOnly();
- MailHeader.Status[0]='D';
- CheckAttachedFile(DelMSGNUM,0);
- sprintf(string,"%s%ld",MsgBase_Location,DelMSGNUM);
- stat=DeleteFile(string);
- stat=Save_OverHeader();
- sprintf(string,"\r\nMessage %d deleted...\r\n",DelMSGNUM);
- AEPutStr(string);
- UnLock(msgbaselock);
- }
- else AEPutStr("Can't Lock MsgBase, Message not Deleted!\r\n");
- return(SUCCESS);
- }
-
- #ifdef RTS
- int ChooseAName(char *s,struct User *hoozer,struct UserKeys *hoozer2,int lflag)
- {
- int stat;
- UWORD i;
-
- i=1;
- do {
- stat=Find_User_From_Name(i,s,hoozer,hoozer2);
- if(stat==0) {
- if(lflag) AEPutStr("\r\nUser does not exist!!\r\n\r\n");
- return(FAILURE);
- }
- if(stat=CheckForAst(s)) {
- AEPutStr(" Expand: ");
- AEPutStr(hoozer2->UserName);
- AEPutStr(" Correct ");
- stat=YesNo(1);
- if(stat<0) return(stat);
- if(!stat) {
- if(AnsiColor) AEPutStr("A");
- stat=1;
- i=(hoozer2->Number)+1;
- } else stat=0;
-
- } else stat=0;
- } while(stat);
- Load_Account(hoozer2->Number,hoozer,hoozer2);
- return(1);
- }
- #endif
-
-
- static int DisplayMessage(void)
- {
- long TimeVar;
- char str[255],string[255],date[100];
-
- TimeVar=(long)MailHeader.MsgDate;
- sprintf(date,"%s",ctime(&TimeVar));
- date[strlen(date)-1]='\0';
-
- if(GET_BIT(ACS_CLEAR_SCREEN_MSG)) SendChar(12);
-
- sprintf(str,"\r\nDate : %-30s Number: %ld\r\n",date,MailHeader.MsgNumb);
- AEPutStr(str);
- strcpy(date,MailHeader.ToName);
- strlwr(date);
- TimeVar=(long)strncmp(date,"eall",4);
- if(TimeVar==0) {
- strcpy(date,User.Name);
- strcat(date," (ALL)");
- } else
- strcpy(date,MailHeader.ToName);
-
- if(netflag)
- {
- sprintf(str,"To : %-30s Address: %-6.6s\r\n",date,MailHeader.ToNet);
- }
- else
- sprintf(str,"To : %-30s ",date);
- AEPutStr(str);
- if(!netflag)
- {
- if(MailHeader.Recv!=0) {
- TimeVar=MailHeader.Recv;
- sprintf(date,"%s",ctime(&TimeVar));
- date[strlen(date)-1]='\0';
- sprintf(str," Recv'd: %s\r\n",date);
- AEPutStr(str);
- } else {
- AEPutStr(" Recv'd: ");
- if(StringCompare(MailHeader.ToName,"ALL")==SUCCESS)
- AEPutStr("N/A\r\n");
- else
- AEPutStr("No\r\n");
- }
-
- if(MailHeader.Status[0]=='P')
- strcpy(string,"Public Message");
- else
- strcpy(string,"Private");
-
- sprintf(str,"From : %-30s Status: %s\r\n",MailHeader.FromName,string);
- AEPutStr(str);
- sprintf(str,"Subject: %s\r\n\r\n",MailHeader.Subject);
- AEPutStr(str);
- }
- else
- {
- if(MailHeader.Status[0]=='P')
- strcpy(string,"Public Message");
- else
- strcpy(string,"Private");
-
- sprintf(str,"From : %-30s Address: %-6.6s\r\n",MailHeader.FromName,MailHeader.FromNet);
- AEPutStr(str);
- sprintf(str,"Status : %-30s Recv'd: ",string);
- if(MailHeader.Recv!=0) {
- TimeVar=MailHeader.Recv;
- sprintf(date,"%s",ctime(&TimeVar));
- date[strlen(date)-1]='\0';
- strcat(str,date);strcat(str,"\r\n");
- AEPutStr(str);
- } else {
- if(StringCompare(MailHeader.ToName,"ALL")==SUCCESS)
- strcat(str,"N/A\r\n");
- else
- strcat(str,"No\r\n");
- AEPutStr(str);
- }
- sprintf(str,"Subject: %s\r\n\r\n",MailHeader.Subject);
- AEPutStr(str);
- }
-
- AlreadyRecvd=MailHeader.Recv;
-
- if(StringCompare(MailHeader.ToName,User.Name)==SUCCESS) {
- if(MailHeader.Recv==0) {
- MailHeader.Recv=time(NULL);
- DelMSGNUM=MailHeader.MsgNumb;
- Save_OverHeader();
- }
- }
-
- sprintf(GSTR3,"%s%ld",MsgBase_Location,MailHeader.MsgNumb);
-
- if(NonStop) {
- stat=MenuSend(GSTR3);
- if(stat==FAILURE)
- NonStop=0;
- } else {
- gnsflag=0; /* 11w */
- (void)MenuSend24(GSTR3,5);
- }
-
- stat=CheckAttachedFile(MailHeader.MsgNumb,1);
- return(stat);
-
- }
-
- static void EditEMessage(long number)
- {
- sprintf(GSTR1,"%s%d",MsgBase_Location,number);
- EditEmacs(GSTR1);
- }
-
- /* 11w addition */
- int GetAValidName(char *Name,char *Default,char *str)
- {
-
- if(strlen(Name)==0) {
- strcpy(str,Default); return(0);
- }
- strcpy(str,Name);
- strlwr(str);
- if(!strncmp(str,"all",3)) {
- strupr(str); return(1);
- }
- if(!strncmp(str,"eall",4)) {
- strupr(str); return(1);
- }
- if(!strncmp(str,"sysop",5))
- Load_Account(1,&tuser,&tuserkeys);
- else {
- stat=ChooseAName(Name,&tuser,&tuserkeys,1);
- if(stat<0) {
- *(str)='\0';return(0);
- }
- }
-
- strcpy(str,tuserkeys.UserName);
- if(!IsTempConf(&tuser,CN-1)) {
- AEPutStr("\r\nUser does not have access to this conference, try another!\r\n\r\n");
- *(str)='\0';return(0);
- }
- return(0);
- }
- /* 11w addition */
-
- static int EditHeader(void)
- {
- int AFlag;
- struct MailHeader MH;
- char string[200];
-
- MH=MailHeader;
- MH.Status[0]='P';
- AEPutStr("\r\n");
- sprintf(string," From: (Enter)='%s'? ",MailHeader.FromName);
- AEPutStr(string);
- stat=LineInput("",string,30,KEYBOARD_TIMEOUT);
- if(stat<0) return(stat);
- AFlag=GetAValidName(string,MailHeader.FromName,MH.FromName);
-
- if(MH.FromName[0]=='\0') return(2);
-
- if(AFlag) {
- AEPutStr("Invalid From Name. Aborting.\r\n");
- return(2);
- }
- sprintf(string," To: (Enter)='%s'? ",MailHeader.ToName);
- AEPutStr(string);
- stat=LineInput("",string,30,KEYBOARD_TIMEOUT);
- if(stat<0) return(stat);
- AFlag=GetAValidName(string,MailHeader.ToName,MH.ToName);
-
- if(MH.ToName[0]=='\0') return(2);
- sprintf(string," Subject: (Enter)='%s'? ",MailHeader.Subject);
- AEPutStr(string);
- stat=LineInput("",string,30,KEYBOARD_TIMEOUT);
- if(stat<0) return(stat);
- if(string[0]>=' ') strcpy(MH.Subject,string);
-
- if(!AFlag) {
- AEPutStr(" Private ");
- stat=YesNo(2);
- if(stat<0) return(stat);
- if(stat) MH.Status[0]='R';
- else MH.Status[0]='P';
- }
-
- MH.Recv = 0L;
- MailHeader=MH;
- DelMSGNUM=MSGNUM-FWDFlag;
- Save_OverHeader();
- return(1);
- }
-
- static int ReplyToMSG(void);
-
- static int READMsg(void)
- {
- int UNum,helplist=0;
- char str[255],string[255];
-
- NonStop=ReplyFlag=TEMPFlag=NumOfZMsgs=0;
- FWDFlag=1;
- FWDDir='+';
- MSGNUM=Last_Msg_Read_Conf+1;
- if(MSGNUM<MailStat.LowestKey) MSGNUM=MailStat.LowestKey;
- AEPutStr("\r\n");
-
- stat=CommandSplit();
- if(stat>1) {
- if((Command[stat-1][0]=='N'||Command[stat-1][0]=='n')&&(Command[stat-1][1]=='S'||Command[stat-1][1]=='s'))
- NonStop=1;
-
- if(Command[1][0]=='S'||Command[1][0]=='s') {
- if(MSGNUM>(MailStat.HighMsgNum-1)) {
- AEPutStr("No new messages.\r\n");
- AEPutStr("\r\n");
- return(FAILURE);
- }
- goto GoNextMsg;
- }
- stat=FirstChar(Command[1]);
- if(stat>=0) {
- if(Command[1][stat]=='-'||Command[1][stat]=='+'||isdigit(Command[1][stat])) {
- strcpy(str,Command[1]);
- goto PassItIN;
- }
- }
- }
-
- NoPass:
-
- FOREVER {
- BackPrompt:
- if(FWDFlag==1) sprintf(str,"%ld%c%ld",MSGNUM,FWDDir,MailStat.HighMsgNum-1);
- else sprintf(str,"%ld%c%ld",MSGNUM,FWDDir,MailStat.LowestKey);
-
- if((MSGNUM>(MailStat.HighMsgNum-1))||(MSGNUM<MailStat.LowestKey))
- strcpy(str,"QUIT");
- //(RTS)
- if(!helplist)
- {
- if(NonStop==0)
- {
- AEPutStr("\r\nMsg. Options: A,D");
- AEPutStr(",R,Q");
- sprintf(string,",?,<CR> ( %s )>: ",str);
- AEPutStr(string);
- }
- }
- else
- {
- AEPutStr("\r\nA>gain");
- AEPutStr("\r\nD>elete Message");
- AEPutStr("\r\nR>eply");
- AEPutStr("\r\nQ>uit");
- sprintf(string,"\r\n<CR>=Next ( %s )? ",str);
- AEPutStr(string);
- helplist=0;
- }
-
- if(NonStop==0) {
- NoDirF=1;
- stat=LineInput("",str,10,KEYBOARD_TIMEOUT);
- if(stat<0) return(stat);
- }
-
- if(str[0]=='?') { helplist=1; continue; }
- if((str[0]=='N'||str[0]=='n')&&(str[1]=='S'||str[1]=='s'))
- NonStop=1;
-
- if((strlen(str)==0)||(NonStop)) {
- NoDirF=1; goto GoNextMsg;
- }
- if(TEMPFlag) {
- if((PrivateFlag==0)||(StringCompare(MailHeader.ToName,User.Name)== \
- SUCCESS)||(StringCompare(MailHeader.FromName,User.Name)==SUCCESS)){
- if(!netflag || !strcmp(Sopt->BBSConfig,MailHeader.ToNet) || !strcmp(Sopt->BBSConfig,MailHeader.FromNet)
- || GET_BIT(ACS_SYSOP_READ) || PrivateFlag==0)
- {
- switch(tolower(str[0])) {
- case 'a':
- stat=DisplayMessage();
- if(stat<0) return(stat);
- goto NextMenu;
- case 'd':
- stat=DeleteMSG();
- NoDirF=1;
- goto GoNextMsg;
- case 'r':
- stat=ReplyToMSG();
- if(stat<0) return(stat);
- NoDirF=1;
- goto GoNextMsg;
- }
- } /* end switch */
- } /* end if */
- if((str[0]=='E'||str[0]=='e')&&(GET_BIT(ACS_MSG_EDIT))) {
- /* 11w add */
- if(str[1]=='H' || str[1]=='h')
- {
- if((stat=EditHeader())<0) return(stat);
- }else
- /* 11w end */
- EditEMessage(MailHeader.MsgNumb);
- stat=DisplayMessage();
- if(stat<0) return(stat);
- goto NextMenu;
- }
- if((str[0]=='U'||str[0]=='u')&&(GET_BIT(ACS_ACCOUNT_EDITING))) {
- strcpy(str,MailHeader.FromName);
- UNum=Find_User_From_Name(1,str,&tuser,&tuserkeys);
- stat=Load_Account(UNum,&tuser,&tuserkeys);
- if(stat==FAILURE) {
- AEPutStr("Warning, error while loading account\r\n");
- goto NextMenu;
- }
- AEPutStr("\014");
- CallersLog("\tAccount editing from mail.\n");
- sprintf(GSTR1,"%sCommands/SysCmd/",Cmds->BBSLoc);
- sprintf(GSTR2,"ACCOUNTS %d",tuser.Slot_Number);
- if(!CustomCommand(GSTR1,GSTR2,1))
- (void)EditInfo(UNum,&tuser,&tuserkeys);
- AEPutStr("\014");
- stat=DisplayMessage();
- if(stat<0) return(stat);
- goto NextMenu;
- }
- }
- if(str[0]=='Q'||str[0]=='q') {
- AEPutStr("\r\n");
- return(SUCCESS);
- }
-
- PassItIN:
- if(NonStop==0) NoDirF=0;
- else {
- NoDirF=1;
- FWDFlag=1;
- FWDDir='+';
- }
- if(str[strlen(str)-1]=='+') {
- if(FWDFlag==(-1)) MSGNUM+=2;
- NoDirF=1;
-
- FWDToMsg=MailStat.HighMsgNum;
- FWDFlag=1;
- FWDDir='+';
- stat=FirstChar(str);
- if(stat>=0&&str[stat]=='+') goto GoNextMsg;
- str[strlen(str)-1]=' ';
- }
- if(str[strlen(str)-1]=='-') {
- if(FWDFlag==1) {
- MSGNUM=MSGNUM-1;
- MSGNUM=MSGNUM-TEMPFlag;
- }
- NoDirF=1;
- FWDToMsg=MailStat.LowestKey;
- FWDFlag=-1;
- FWDDir='-';
- stat=FirstChar(str);
- if(stat>=0&&str[stat]=='-') goto GoNextMsg;
- str[strlen(str)-1]=' ';
- }
- strcat(str," ");
-
- stat=FirstChar(str);
- if(stat>=0) {
- if(isdigit(str[stat])) {
- sscanf(str,"%ld",&MSGNUM);
- GoNextMsg:
- if(doormsgcode==2) { doormsgcode=0; return(SUCCESS); }
- if(doormsgcode==1) doormsgcode=2;
-
- if(stat >=0 || str[stat]=='+' || str[stat] == '-') {
- //(RTS)
- if(User_keys.Userflags & USER_SCRNCLR) AEPutStr("\f");
- }
- stat=Readit();
- if(stat<FAILURE) return(NO_CARRIER);
- if(stat==10) return(10);
- if(stat==FAILURE) {
- AEPutStr("\r\n");
- if(NumOfZMsgs!=0) return(SUCCESS);
- else return(FAILURE);
- }
- }
- }
- NextMenu:
- AEPutStr("\r\n");
- }
- return(SUCCESS);
- }
-
- static void NoMorePlus(void)
- {
- char str[100];
-
- if(NonStop==0) {
- if(NoDirF==0) {
- sprintf(str,"\r\nThe last message in this conference is %ld\r\n",MailStat.HighMsgNum-1);
- AEPutStr(str);
- }
- }
- NonStop=0;
- }
-
- static void NoMoreMinus(void)
- {
- char str[100];
-
- if(NonStop==0) {
- if(NoDirF==0) {
- sprintf(str,"\r\nThe first message in this conference is %ld\r\n",MailStat.LowestNotDel);
- AEPutStr(str);
- }
- }
- NonStop=0;
- }
-
- static int Readit(void)
- {
- TEMPFlag=1;
-
- do {
- if(MSGNUM>MailStat.HighMsgNum-1) {
- NoMorePlus(); return(FAILURE);
- }
- if(MSGNUM<MailStat.LowestKey) {
- NoMoreMinus(); return(FAILURE);
- }
-
- stat=Load_MessageHeader();
- if(stat==FAILURE) {
- AEPutStr("\r\nMSG Base Error!!!\r\n"); return(FAILURE);
- }
-
- PrivateFlag=0;
- if((MailHeader.Status[0]=='R')&& !(GET_BIT(ACS_SYSOP_READ))) {
- if((StringCompare(MailHeader.ToName,User.Name)!=SUCCESS)&& \
- (StringCompare(MailHeader.FromName,User.Name)!=SUCCESS)) {
- PrivateFlag=1;
- if(NoDirF!=0) goto NextMSG;
- AEPutStr("\r\nThat message is Private.\r\n\r\n");
- NonStop=0;
- return(SUCCESS);
- }
- }
- if(MailHeader.Status[0]=='D') {
- PrivateFlag=1;
- if(NoDirF!=0) goto NextMSG;
- AEPutStr("\r\nThat message has been deleted.\r\n\r\n");
- NonStop=0;
- MSGNUM=MSGNUM+FWDFlag;
- return(SUCCESS);
- }
-
- NumOfZMsgs+=1;
- stat=DisplayMessage();
- if(stat<0) return(stat);
-
- if(MSGNUM>Last_Msg_Read_Conf) Last_Msg_Read_Conf=MSGNUM;
-
- MSGNUM=MSGNUM+FWDFlag;
- return(SUCCESS);
-
- NextMSG:
- if(MSGNUM>Last_Msg_Read_Conf) Last_Msg_Read_Conf=MSGNUM;
- MSGNUM=MSGNUM+FWDFlag;
- } while((MSGNUM<MailStat.HighMsgNum)&&(MSGNUM>=MailStat.LowestKey));
-
- if(MSGNUM>=MailStat.HighMsgNum) NoMorePlus();
- else NoMoreMinus();
-
- return(FAILURE);
- }
-
- static int ReplyPrompt(void);
-
- static int SearchNewMail(int cn)
- {
- int MailFLAG;
- long msgcnt=0,dcnt=0;
-
- MailFLAG=0;
- NonStop=0;
-
- if(MailStat.HighMsgNum<Last_New_Read_Conf) Last_New_Read_Conf=MailStat.LowestKey;
- MSGNUM=Last_New_Read_Conf;
-
- if(MSGNUM<=0) Last_New_Read_Conf=MSGNUM=MailStat.LowestKey;
- if(MSGNUM<MailStat.LowestKey) MSGNUM=MailStat.LowestKey;
- if(MSGNUM>=MailStat.HighMsgNum)
- {
- if(cn) {
- AEPutStr("No mail today!\r\n");
- } else {
- AEPutStr("\r\n");
- }
- return(SUCCESS);
- }
-
- if(!cn) AEPutStr("\r\nNew Mail Scan ");
-
- do {
- if(MSGNUM>=MailStat.HighMsgNum) {
- Last_New_Read_Conf=MailStat.HighMsgNum;
- goto GetOUT;
- }
- msgcnt++;
- if(msgcnt>9) {
- msgcnt=0;
- dcnt++;
- if(dcnt>9) {
- if(dcnt>17) {
- dcnt=0;
- }
- AEPutStr("\b \b");
- } else AEPutStr(".");
-
- }
-
- stat=Load_MessageHeader();
- if(MailHeader.Status[0]=='D')goto GetNextMSG;
- if((StringCompare(MailHeader.ToName,User.Name)==SUCCESS)|| \
- (StringCompare(MailHeader.ToName,"eall")==SUCCESS))
- {
- if(!netflag || !strcmp(Sopt->BBSConfig,MailHeader.ToNet))
- {
- if(MailFLAG==1) {
- msgcnt=dcnt=0;
- stat=DisplayMessage();
- if(stat<0) return(stat);
- Last_New_Read_Conf=MSGNUM+1;
-
- stat=ReplyPrompt();
- if(stat==FAILURE) return(SUCCESS);
- if(stat<0) return(stat);
-
- AEPutStr("\r\nContinuing New Mail Scan...");
- }
- if(MailFLAG==0) {
- AEPutStr("Found mail!\r\n\r\nWould you like to read it now ");
- stat=YesNo(1);
- if(stat<0) return(stat);
- if(stat) {
- MailFLAG=1;
- msgcnt=dcnt=0;
- stat=DisplayMessage();
- if(stat<0) return(stat);
- Last_New_Read_Conf=MSGNUM+1;
- stat=ReplyPrompt();
- if(stat==FAILURE) return(SUCCESS);
- if(stat<0) return(stat);
-
- AEPutStr("\r\nContinuing New Mail Scan...");
- } else {
- AEPutStr("\r\n");
- return(SUCCESS);
- }
- }
- }
- }
- GetNextMSG:
- MSGNUM+=1;
- } while(MSGNUM<=MailStat.HighMsgNum);
-
- GetOUT:
-
- if(MailFLAG==0) AEPutStr("No mail today!\r\n");
- else AEPutStr("No more mail!\r\n");
-
- return(SUCCESS);
- }
-
-
-
- static int newmailsearch = FALSE;
-
-
-
- static int ReplyPrompt(void)
- {
- int UNum,helplist=0;
- char str[255],string[255];
- //char str1[256];
- for(;;) {
- FWDFlag=0;
- if(!helplist)
- {
- if(NonStop==0)
- {
- AEPutStr("\r\nMsg. Options: A,D");
- AEPutStr(",R,Q");
- sprintf(string,",?,<CR> ( %ld ) >: ",MSGNUM);
- AEPutStr(string);
- }
- }
- else
- {
-
- AEPutStr("\r\nA>gain");
- AEPutStr("\r\nD>elete Message");
- AEPutStr("\r\nR>eply");
- AEPutStr("\r\nQ>uit");
- sprintf(string,"\r\n<CR>=Next ( %ld ) >: ",MSGNUM);
- AEPutStr(string);
- helplist=0;
- }
-
-
-
- if(NonStop==0) {
- stat=LineInput("",str,10,KEYBOARD_TIMEOUT);
- if(stat<0) return(stat);
- }
- if(str[0]=='?') { helplist=1; continue; }
- if((str[0]=='N'||str[0]=='n')&&(str[1]=='S'||str[1]=='s'))
- NonStop=1;
-
- if((strlen(str)==0)||(NonStop)) return(SUCCESS);
-
- if((str[0]=='A'||str[0]=='a')) {
- stat=DisplayMessage();
- if(stat<0) return(stat);
- continue;
- }
- if((str[0]=='D'||str[0]=='d')) {
- if((PrivateFlag==0)||((StringCompare(MailHeader.ToName,User.Name)==SUCCESS)
- && (!netflag || !strcmp(Sopt->BBSConfig,MailHeader.ToNet)))) {
- stat=DeleteMSG();
- return(SUCCESS);
- } else {
- AEPutStr("\r\nNot your message.\r\n");
- continue;
- }
- }
- if((str[0]=='E'||str[0]=='e')&&(GET_BIT(ACS_MSG_EDIT))) {
- if(str[1]=='H' || str[1]=='h')
- {
- if((stat=EditHeader())<0) return(stat);
- }else
- EditEMessage(MailHeader.MsgNumb);
- stat=DisplayMessage();
- if(stat<0) return(stat);
- continue;
- }
- if((str[0]=='U'||str[0]=='u')) {
- if(GET_BIT(ACS_ACCOUNT_EDITING)) {
- strcpy(str,MailHeader.FromName);
- UNum=Find_User_From_Name(1,str,&tuser,&tuserkeys);
- stat=Load_Account(UNum,&tuser,&tuserkeys);
- if(stat==FAILURE) {
- AEPutStr("Warning, error while loading account\r\n");
- continue;
- }
-
- AEPutStr("\014");
- CallersLog("\tAccount editing from mail.\n");
- (void)EditInfo(UNum,&tuser,&tuserkeys);
- AEPutStr("\014");
- stat=DisplayMessage();
- if(stat<0) return(stat);
- continue;
- }
- }
- if(str[0]=='Q'||str[0]=='q') {
- AEPutStr("\r\n");
- return(FAILURE);
- }
- //(RTS)
-
- if((str[0]=='r'||str[0]=='R')) {
- if((PrivateFlag==0)||((StringCompare(MailHeader.ToName,User.Name)==SUCCESS)
- && (!netflag || !strcmp(Sopt->BBSConfig,MailHeader.ToNet)))
- || !strnicmp(MailHeader.ToName,"EALL",4)) {
- stat=ReplyToMSG();
- return(SUCCESS);
- } else {
- AEPutStr("\r\nNot your message.\r\n");
- continue;
- }
- }
- AEPutStr("\r\nNo such command!!\r\n");
- }
- return(SUCCESS);
- }
-
- static int ReplyToMSG(void)
- {
- char str[255],frm[255];
-
- DelMSGNUM=MailHeader.MsgNumb;
- strcpy(frm,MailHeader.ToName);
- AEPutStr("\r\n (------------------------------)\r\n");
- strcpy(MailHeader.ToName,MailHeader.FromName);
- sprintf(str," To: (Enter)='ALL'? %s\r\n",MailHeader.ToName);
- AEPutStr(str);
- CheckToForward(str,MailHeader.ToName,1);
- strcpy(MailHeader.ToNet,MailHeader.FromNet);
- //sprintf(str," ToNet: %s\r\n",MailHeader.ToNet);
- // if(netflag) AEPutStr(str);
- strcpy(MailHeader.FromNet,Sopt->BBSConfig);
- AEPutStr("Subject: (Blank)=abort? ");
- stat=LineInput(MailHeader.Subject,str,30,KEYBOARD_TIMEOUT);
- if(stat<0) { return(stat); }
- strcpy(MailHeader.Subject,str);
- if(strlen(MailHeader.Subject)==0) return(SUCCESS);
-
- MailHeader.Recv=0L;
-
- ReplyFlag=1;
- stat=EnterMSG();
- if(stat<0) return(stat);
-
- if(StringCompare(frm,User.Name)==SUCCESS) {
- AEPutStr("Delete original message ");
- stat=YesNo(2);
- if(stat<0) return(stat);
- if(stat) DeleteMSG();
- }
- return(SUCCESS);
- }
-
- int CallMsgFuncs(WORD which,int pass)
- {
- int stat;
- fileattach=TRUE;
- strcpy(GSTR3,MsgBase_Location);
- strcat(GSTR3,"HeaderFile");
- gfh=Open(GSTR3,MODE_OLDFILE);
- if(gfh==NULL) {
- gfh=Open(GSTR3,MODE_NEWFILE);
- if(gfh==NULL) {
- MyError(2); fileattach=FALSE;
- return(FAILURE);
- }
- }
- CurrentSeekPos=0;
- stat=FAILURE;
- if(NetConf[0]!='\0') netflag=1; else netflag=0;
- // if(SysBase->LibNode.lib_Version>=36)
- //SetVBuf(gfh,NULL,1,32768);
- MCIViewSafe=FALSE;
- switch(which) {
- case 1:
- stat=READMsg(); break;
- case 2:
- stat=EnterMSG(); break;
- case 3:
- newmailsearch = TRUE;
- stat=SearchNewMail(pass);
- newmailsearch = FALSE;
- break;
- }
- Close(gfh);
- fileattach=FALSE;
- MCIViewSafe=TRUE;
- return(stat);
- }
-
- int ValidNet(char *str)
- {
- struct DiskObject *dobj;
- char image[100];
- if(*(str)=='\0') { strcpy(str,Sopt->BBSConfig); return(TRUE); }
- if(!strnicmp(str,"ALL",3)) { return(TRUE); }
- sprintf(image,"%sAmiXnet/Directory/@%s",Cmds->BBSLoc,str);
- if(dobj=GetDiskObject(image)) { FreeDiskObject(dobj); return(TRUE);}
- return(FALSE);
- }
-
- void AttachMsgFiles(long num,char *s)
- {
- char image[100];
- char str[100];
- struct FileInfoBlock *FBlock;
- BPTR FLock;
- strcpy(s,"");
- sprintf(str,"%sF%ld",MsgBase_Location,num);
-
- if(FBlock=(struct FileInfoBlock *)AllocDosObject(DOS_FIB,NULL)) {
- if(FLock=Lock(str,ACCESS_READ)) {
- if(Examine(FLock,FBlock)) {
- while(ExNext(FLock,FBlock))
- {
- sprintf(image,"%sF%ld/%s ",MsgBase_Location,num,FBlock->fib_FileName);
- if(strlen(image)+strlen(s)<1024)
- {
- AEPutStr("\r\nFlagging >:");AEPutStr(FBlock->fib_FileName);
-
- strcat(s,image);
- }
-
- }
- AEPutStr("\r\n");
- }
- UnLock(FLock);
- }
- FreeDosObject(DOS_FIB,FBlock);
- }
-
- }
-
- void DeleteMsgFiles(long num)
- {
- char image[100];
- struct FileInfoBlock *FBlock;
- BPTR FLock;
- char str[100];
- sprintf(str,"%sF%ld",MsgBase_Location,num);
-
- if(FBlock=(struct FileInfoBlock *)AllocDosObject(DOS_FIB,NULL)) {
- exp:
- if(FLock=Lock(str,ACCESS_READ)) {
-
- if(Examine(FLock,FBlock)) {
- while(ExNext(FLock,FBlock))
- {
- sprintf(image,"%sF%ld/%s",MsgBase_Location,num,FBlock->fib_FileName);
- //UnLock(FLock);
- DeleteFile(image);// goto exp;
- }
- AEPutStr("\r\n");
- }
- UnLock(FLock);
- }
- FreeDosObject(DOS_FIB,FBlock);
- DeleteFile(str);
- }
-
- }